{T}

Curl 命令最常见使用方式及案例

0. 引言

排查网站故障时,浏览器开发者工具很好用,但脚本调 API、监控服务状态、快速验证接口响应时,你需要一个命令行 HTTP 客户端——这就是 Curl。它模拟客户端请求,遵循 HTTP/HTTPS 协议,是运维与开发排查问题的"瑞士军刀"。本章从网站服务分析场景切入,梳理 Curl 最常用的参数与案例:状态码判断、通信过程查看、Referer 防盗链、IPv6 检测、代理访问、断点续传与各类 HTTP 方法。


1. 网站排查场景:Curl 的用武之地

部署或变更完一个站点后,排查"打不开"问题的标准路径是自下而上

图表渲染中…
  • 进程层ps 查看进程是否存在、是否 running、CPU 占用是否正常,配合日志查错误;
  • 网络层ping 通不通、TCP 连接是否建立(可配合 telnet/tcpdump 抓包);
  • 应用层:用 Curl 模拟 HTTP 请求,判断服务端返回的头信息与 body 是否符合预期。

2. 基本用法与状态码判断

2.1 常用参数

参数作用
无参数默认输出响应 body
-i输出响应头 + body
-I只输出响应头(HEAD 请求)
-o输出到文件,如 -o output.txt
-v打印完整通信过程(请求头、响应头、body)
bash
curl baidu.com          # 返回 body(HTML)
curl -I baidu.com       # 只返回响应头
curl -v https://example.com   # 查看完整通信过程

2.2 状态码速查

区间含义常见码
1xx信息响应,未完成完整请求100 Continue
2xx成功200 OK
3xx重定向301/302
4xx客户端错误400、403(受限)、404(未找到)、499(客户端断开)
5xx服务端错误500(程序问题)、502、503

通过状态码可快速定位方向:403 看权限、404 看路径与防盗链规则、5xx 查服务端程序日志。


3. 实战案例

3.1 防盗链排查:Referer 头

Nginx 配置了"必须携带 Referer 才能下载"的规则时,直接请求返回 404:

bash
# 不带 Referer → 404
curl -I <下载链接>

# 携带 Referer → 200
curl -I -e "https://example.com" <下载链接>

-e/--referer 指定请求来源地址,匹配服务端防盗链规则后即可正常访问。

3.2 自定义请求头

HTTP 请求头可以被用户自定义或改写:

bash
# 指定浏览器类型
curl --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X)" <URL>

# 添加自定义头(模拟 JSON 接口)
curl -H "Content-Type: application/json" -X POST -d '{"name":"test"}' <URL>

3.3 HTTPS 与自定义证书

  • 公共证书站点:直接访问,无需本地密钥;
  • 自建证书站点:需要把客户端密钥放到本地,用 -E 指定:
bash
curl -E /path/to/client.pem https://self-signed.example.com

3.4 IPv6 站点检测

本地有 IPv6 地址且服务端支持 IPv6 时,可用 -6 强制 IPv6 请求,--resolve 手动指定域名解析结果:

bash
curl -6 -vo /dev/null \
  --resolve "static.meituan.net:80:[240e:ff:e02c:1:21::]" \
  "http://static.meituan.net/path/app.js"
参数作用
-6发起 IPv6 请求
-v显示通信过程
-o /dev/nullbody 丢弃,只关注响应头
--resolve手动指定域名→IP 解析

4. 功能性使用

4.1 代理访问

bash
curl -x http://200.200.200.200:8080 https://example.com

-x 指定代理地址,请求经代理转发,用于测试代理链路或访问受限资源。

4.2 上传与下载

bash
# FTP 下载
curl -u user:pass ftp://ftp.example.com/file.zip

# 断点续传:-C 从上次中断位置继续
curl -C - -o file.zip https://example.com/big.zip

断点续传原理:客户端记录已下载字节索引,网络抖动后重连,基于原有断点继续下载,无需从头再来——大文件下载的必备选项。


5. HTTP 请求方法

默认 Curl 使用 GET,通过 -X 指定方法、-d 携带数据:

bash
# GET(默认)
curl https://api.example.com/users

# POST:提交参数
curl -X POST -d "arg1=value1&arg2=value2" https://api.example.com/submit

# PUT:更新资源
curl -X PUT -d "data" https://api.example.com/users/1

# DELETE:删除资源
curl -X DELETE https://api.example.com/users/1

# OPTIONS:探测支持的请求方法
curl -X OPTIONS https://api.example.com/users

6. 小结

  • 排查思路:进程 → 网络 → 应用层,Curl 是应用层验证的核心工具;
  • 参数速记-I 看头、-v 看全过程、-o 存文件、-e 带 Referer、-H 自定义头、-E 客户端证书、-6 --resolve 测 IPv6;
  • 功能场景-x 代理、-C - 断点续传、-X + -d 组合覆盖全部 HTTP 方法;
  • 状态码:200 正常、3xx 重定向、4xx 客户端问题、5xx 服务端问题,是故障定位的第一信号。

下一章讲解 Shell 如何实现系统初始化——用脚本自动化完成新机器的环境准备。